﻿//小明同学最近开发了一个网站，在用户注册账户的时候，需要设置账户的密码，为了加强账户的安全性，小明对密码强度有一定要求：
//
//1.  密码只能由大写字母，小写字母，数字构成；
//
//2.  密码不能以数字开头；
//
//3.  密码中至少出现大写字母，小写字母和数字这三种字符类型中的两种；
//
//4.  密码长度至少为8
//
//现在小明受到了n个密码，他想请你写程序判断这些密码中哪些是合适的，哪些是不合法的。
//#include <stdio.h>
//
////检查函数
//int isOk(char* p) {
//
//    char* cur = p;
//    //判断是否数字开头
//    if ((*cur) >= 0 && (*cur) <= 9) {
//        return 0;
//    }
//    //检查字符种类，arr[0]代表数字，arr[1]代表小写字母，arr[2]代码大写字母
//    int arr[3] = { 0 };
//    if ((*cur) >= 'a' && (*cur) <= 'z') {
//        arr[1] = 1;
//    }
//    else {
//        {
//            arr[2] = 1;
//        }
//    }
//    ++cur;
//    int count = 1;
//    while (*cur != '\0') {
//        if ((*cur) >= 'a' && (*cur) <= 'z') {
//            if (arr[1] == 0) {
//                arr[1] = 1;
//            }
//            ++count;
//        }
//        else if ((*cur) >= 'A' && (*cur) <= 'Z') {
//            if (arr[2] == 0) {
//                arr[2] = 1;
//            }
//            ++count;
//        }
//        else if ((*cur) >= 0 && (*cur) <= 9) {
//            if (arr[0] == 0) {
//                arr[0] = 1;
//            }
//            ++count;
//        }
//        else {
//            return 0;
//        }
//        ++cur;
//    }
//    if (arr[0] + arr[1] + arr[2] >= 2 && count >= 8) {
//        return 1;
//    }
//    return 0;
//}
//
//int main() {
//    int n = 0;
//    scanf("%d", &n);
//    while (n--) {
//        char str[100] = "";
//        scanf("%s", str);
//
//        int is_ = isOk(str);
//        if (is_ == 0) {
//            printf("NO\n");
//        }
//        else {
//            printf("YES\n");
//        }
//    }
//    return 0;
//}



//给定一个长度为 n 的非降序数组和一个非负数整数 k ，要求统计 k 在数组中出现的次数
//
//
//int _get_idx(int* nums, int numsLen, int k, int flag) {
//    int left = 0, right = numsLen - 1, mid;
//    while (left <= right) {
//        mid = (left + right) / 2;
//        if (nums[mid] > k) {
//            right = mid - 1;
//        }
//        else if (nums[mid] < k) {
//            left = mid + 1;
//        }
//        else {
//            if (flag == 0) { //往左边找
//                if (mid == left || nums[mid - 1] != k)
//                    return mid;
//                else
//                    right = mid - 1;
//            }
//            else { //往右边找
//                if (mid == right || nums[mid + 1] != k)
//                    return mid;
//                else
//                    left = mid + 1;
//            }
//        }
//    }
//    //没有找到
//    return -1;
//}
//int GetNumberOfK(int* nums, int numsLen, int k) {
//    // write code here
//    int get_left = _get_idx(nums, numsLen, k, 0);
//    int get_right = _get_idx(nums, numsLen, k, 1);
//    if (get_left == -1 && get_right == -1)
//        return 0;
//    return get_right - get_left + 1;
//}

//
//整数转换。编写一个函数，确定需要改变几个位才能将整数 A 转成整数 B。
//
//int convertInteger(int A, int B) {
//    //
//    int C = A ^ B;
//    int count = 0;
//    //统计C中二进制的所有1的位数
//    for (int i = 0; i < 32; ++i)
//    {
//        int tmp = C & 1;
//        if (tmp == 1)
//        {
//            count++;
//        }
//        C = C >> 1;
//    }
//    return count;
//}
//
//
//给你一个整数数组 `nums` ，其中总是存在 唯一的 一个最大整数 。
//
//请你找出数组中的最大元素并检查它是否 至少是数组中每个其他数字的两倍 。如果是，则返回 最大元素的下标 ，否则返回 `-1` 。
//int dominantIndex(int* nums, int numsSize) {
//    //找出最大的和第二大的数进行比较即可
//    int first_max = nums[0];
//    int sencond_max = -1;
//
//    int index = 0;
//    for (int i = 1; i < numsSize; ++i)
//    {
//        if (nums[i] > sencond_max && sencond_max != first_max)
//        {
//            sencond_max = nums[i];
//        }
//        if (nums[i] > first_max)
//        {
//            sencond_max = first_max;
//            first_max = nums[i];
//            index = i;
//        }
//
//    }
//    if (sencond_max == 0)
//    {
//        return index;
//    }
//
//    if (first_max / sencond_max >= 2)
//    {
//        return index;
//    }
//    else
//    {
//        return -1;
//    }
//}
//
//
//给定两个数组 nums1 和 nums2 ，返回它们的交集。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
//int* intersection(int* nums1, int nums1Size, int* nums2, int nums2Size,
//    int* returnSize) {
//    static int arr[1000];
//    *returnSize = 0;
//    int i, j, k;
//    for (i = 0; i < nums1Size; i++) {
//        for (j = 0; j < nums2Size; j++) {
//            if (nums2[j] == nums1[i])
//                break; // 判断nums1[i] 是否在nums2数组中
//        }
//        if (j == nums2Size) { // nums1中i位置的数据在nums2数组中不存在，则非交集数据
//            continue;
//        }
//        // 只有在另一个数组中存在的数据才能走下来，判断是否已经被添加到返回数组中
//        for (j = 0; j < *returnSize; j++) {
//            if (nums1[i] == arr[j])
//                break; // 判断nums1[i] 是否在 arr 这个返回数组中
//        }
//        if (j == *returnSize) { // 不在返回数组中，则添加到返回数组中
//            arr[*returnSize] = nums1[i];
//            *returnSize += 1;
//        }
//    }
//    return arr;
//}